\documentclass[10pt,letterpaper]{article}

\usepackage[brazil]{babel}
\usepackage[utf8x]{inputenc}
\usepackage{url}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx,url}
\usepackage{longtable}

\usepackage[pagebackref,colorlinks=true,urlcolor=red,citecolor=green,linkcolor=blue]{hyperref}
\usepackage[letterpaper,top=2.54cm, bottom=2.54cm, left=2.54cm, right=2.54cm]{geometry}

\author{Carlos Eduardo Atencio Torres -- 6344662 \\
        Fillipe Manoel Xavier Resina -- 5893886 \\
		Paulo de Tarso Guerra Oliveira -- 6343185 \\
		Rosario Alejandra Medina Rodríguez -- 7012722}
		
\title{Sistemas Baseados em Conhecimento \\ Ontologia do Meio Acadêmico}
\date{\today}


\begin{document}
\maketitle

\section{Descrição da Ontologia}
A ontologia \textit{academic-sbc} representa alguns conceitos do meio acadêmico e as relações entre eles. Buscamos desenvolver uma ontologia clara e sucinta, contendo apenas o necessários para responder as questões de competência da Terceira Etapa, além de, claro, atender os conceitos e relações exigidos pelo projeto. Utilizamos como ferramenta o editor de ontologias \textit{Protégé}, em sua versão 4.0.

Nas seções a seguir descreveremos os conceitos, relações e instâncias escolhidos para compor a \textit{academic-sbc}.

\subsection{Conceitos} \label{conceitos}

A ontologia possui cinco macro conceitos: \textit{Place}, \textit{Event}, \textit{EducationalOrganization}, \textit{Publication}, \textit{Person}. Deste três últimos especializamos os conceitos exigidos pelo projeto, os quais pertencem a maioria das instâncias. A Figura \ref{fig:herarquia} ilustra toda a hierarquia de conceitos, e detalhes individuais de cada conceito são definidos a seguir.

%\bigskip

\begin{longtable}{ll} \hline

%%%%%%%%%%%%%%
\textbf{Conceito}: 	& $ Thing $ \\ 
\textbf{Descrição}:	& Superclasse a qual descendem todos os conceitos \\ 
\hline \\ \hline 

%%%%%%%%%%%%%%

\textbf{Conceito}: 	& $ EducationOrganization $ \\ 
\textbf{Descrição}:	& A classe de todas as organizações educacionais. Definição aplicável a \\
			& qualquer instituição voltado a prática de ensino. \\
\hline \\ \hline 

%%%%%%%%%%%%%%
\textbf{Conceito}: 	& $ University $ \\ 
\textbf{Descrição}:	& A classe de todas as universidades. Universidades são instituições que \\
			& fornecem ensino de nível superior, graduação, e/ou pós-graduação, e que \\
			& desenvolvem pesquisas científicas. \\
\hline \\ \hline 

%%%%%%%%%%%%%%
\textbf{Conceito}: 	& $ Department $ \\ 
\textbf{Descrição}:	& A classe de todos os departamentos. Departamentos são responsáveis por \\
			& disciplinas e cursos em níveis de graduação, aperfeiçoamento e \\
			& pós graduação e pertencen a um instituto.\\
\hline \\ \hline 

%%%%%%%%%%%%%%
\textbf{Conceito}: 	& $ Institute $ \\ 
\textbf{Descrição}:	& A classe de todos os institutos. Institutos são  estabelecimentos públicos \\
			& ou privados que pertencen a uma universidade e desenvolvem pesquisas \\
			& científicas.\\
\hline %\\ \hline 

%%%%%%%%%%%%%%
\textbf{Conceito}: 	& $ Event $ \\ 
\textbf{Descrição}:	& A classe de todos os eventos. Eventos são reuniões acadêmicas e científicas. \\
\hline \\ \hline 

%%%%%%%%%%%%%%
\textbf{Conceito}: 	& $ Conference $ \\ 
\textbf{Descrição}:	& A classe de todas as conferencias. Conferencias são preleções públicas sobre\\
			& determinado assunto técnico, artístico, científico ou literário. \\
\hline \\ \hline 

%%%%%%%%%%%%%%
\textbf{Conceito}: 	& $ Person $ \\ 
\textbf{Descrição}:	& A classe de todas as pessoas, seres humanos. Classe genéria da qual deriva \\
			& toda especialização de indivíduos. \\ 
\hline \\ \hline 

%%%%%%%%%%%%%%
\textbf{Conceito}: 	& $ Professor $ \\ 
\textbf{Descrição}:	& A classe de todos os professores. Professores são indivíduos afiliados a um \\
			& departamento educacional. \\
\hline \\ \hline 

%%%%%%%%%%%%%%
\textbf{Conceito}: 	& $ Student $ \\ 
\textbf{Descrição}:	& A classe de todos os estudantes, indivíduos que estudam numa instituição \\
			& educativa. \\
\hline \\ \hline 

%%%%%%%%%%%%%%
\textbf{Conceito}: 	& $ Place $ \\ 
\textbf{Descrição}:	& A classe de todos os lugares. Ponto ou localidade em que está alguma coisa\\
			& ou alguma pessoa. \\
\hline \\ \hline 

%%%%%%%%%%%%%%
\textbf{Conceito}: 	& $ Continent $ \\ 
\textbf{Descrição}:	& A classe de todos os continentes. Continentes são grandes extensões de terra \\
			& contínua e estão formados por países. \\
\hline \\ \hline 

%%%%%%%%%%%%%%
\textbf{Conceito}: 	& $ Country $ \\ 
\textbf{Descrição}:	& A classe de todos os países. Países são territórios sociais, política e \\
			& geograficamente delimitados.\\
\hline \\ \hline 

%%%%%%%%%%%%%%
\textbf{Conceito}: 	& $ Publication $ \\ 
\textbf{Descrição}:	& A classe de todas as publicações. Publicações são trabalhos científicos, \\	
			& literários ou artísticos que se publicam pela imprensa. \\
\hline \\ \hline 

%%%%%%%%%%%%%%
\textbf{Conceito}: 	& $ Article $ \\ 
\textbf{Descrição}:	& A classe de todos os artigos. Artigos são escritos de certa importância que se\\
			& publicam em jornais, revistas, etc. \\
\hline \\ \hline 

%%%%%%%%%%%%%%
\textbf{Conceito}: 	& $ ConferencePaper $ \\ 
\textbf{Descrição}:	& A classe de todos os artigos publicados en Conferências.  \\
\hline \\ \hline 

%%%%%%%%%%%%%%
\textbf{Conceito}: 	& $ JournalArticle $ \\ 
\textbf{Descrição}:	& A classe de todos os artigos publicados em revistas. \\
\hline \\ \hline 

%%%%%%%%%%%%%%
\textbf{Conceito}: 	& $ Journal $ \\ 
\textbf{Descrição}:	& A classe de todas as revistas. Revistas são certas publicações periódicas.\\
\hline \\ \hline 

%%%%%%%%%%%%%%
\textbf{Conceito}: 	& $ Proceedings $ \\
\textbf{Descrição}:	& A classe de todos  \textit{proceedings}. \textit{Proceeding} são coleções de artigos \\
					& publicados no contexto de uma conferência. \\
%\textbf{Descrição}:	& A classe de todos as sequencias de eventos que ocorrem num lugar particular \\
%					& ou situação em particular.\\

\hline \\ \hline 


%%%%%%%%%%%%%%
\textbf{Conceito}: 	& $ Thesis $ \\ 
\textbf{Descrição}:	& A classe de todas as teses. Tese é uma memória, obra composta para a \\
			& obtenção do grau de  mestre ou doutor.\\
\hline \\ \hline 

%%%%%%%%%%%%%%
\textbf{Conceito}: 	& $ DoctoralThesis $ \\ 
\textbf{Descrição}:	& A classe de todas as Teses de Doutorado. Tese Doutoral é um trabalho de \\
			& pesquisa escrito, para a obtenção do grau de Doutor.\\
\hline \\ \hline 

%%%%%%%%%%%%%%
\textbf{Conceito}: 	& $ MastersThesis $ \\ 
\textbf{Descrição}:	& A classe de todas as Teses de Mestrado. Tese de Mestrado é um trabalho de \\ 
			& pesquisa escrito, para a obtenção do grau de Mestre.\\
\hline \\ \hline 

 \end{longtable} 

\begin{figure}[!h]
  \centering
  \includegraphics[width=.95\textwidth]{images/conceitos.png}
  \caption{Hierarquia de conceitos da ontologia \textit{academic-sbc.owl}}
  \label{fig:herarquia}
\end{figure}


\subsection{Papéis}
Vimos nas Seção \ref{conceitos} a presença de relações como fator de restrição domínio de classes, como por exemplo em departamento, que pertence ao conjunto de organizações educacionais que fazem parte de um instituto. Nesta sessão veremos uma descrição de todas as relações da ontologia, evidenciando também sua imagem, domínio e relações inversas.

Possuímos dois tipos de relações: indivíduo-indivíduo (\textit{object properties}) e indivíduo-tipo de dados (\textit{datatype properties}). Apresentaremos inicialmente os conceitos do primeiro tipo e em seguida os do segundo.

\begin{longtable}{ll} \hline

\textbf{Relação}: 	& $ hasAdvisor $ \\ 
\textbf{Descrição}:	& Indica que uma pessoa ou tese é orientada por um determinado \\
					& professor. \\ 
\textbf{Inverso}: 	& $ isAdvisorOf $ \\ 

\hline \\ \hline 

\textbf{Relação}: 	& $ hasAuthor $ \\ 
\textbf{Descrição}:	& Indica que uma publicação é de autoria de uma pessoa. \\ 
\textbf{Inverso}: 	& $ isAuthorOf $ \\ 

\hline \\ \hline 

\textbf{Relação}: 	& $ hasEventDocument $ \\ 
\textbf{Descrição}:	& Indica que um evento tem como publicação um dado documento \\
					%& to. \\
\textbf{Inverso}: 	& $ isEventDocumentOf $ \\ 

\hline \\ \hline 

\textbf{Relação}: 	& $ hasParts $ \\ 
\textbf{Descrição}:	& Indica que um objeto tem, em sua composição, um outro objeto \\
					%& jeto. \\
\textbf{Inverso}: 	& $ isPartOf $ \\ 

\hline \\ \hline 

\textbf{Relação}: 	& $ isAdvisorOf $ \\ 
\textbf{Descrição}:	& Indica que um professor é orientador de determinada pessoa \\
					& ou tese. \\ 
\textbf{Inverso}: 	& $ hasAdvisor $ \\

\hline \\ \hline 

\textbf{Relação}: 	& $ isAffiliatedTo $ \\ 
\textbf{Descrição}:	& Indica que um professor está afiliado (associado) a um \\
				    & departamento de uma universidade. \\ 

\hline \\ \hline 

\textbf{Relação}: 	& $ isAuthorOf $ \\ 
\textbf{Descrição}:	& Indica que uma pessoa é autora (ou uma das autoras) de um \\
					& artigo ou uma tese. \\ 
\textbf{Inverso}: 	& $ hasAuthor $ \\ 

\hline \\ \hline 

\textbf{Relação}: 	& $ isEventDocumentOf $ \\ 
\textbf{Descrição}:	& Indica que uma publicação é um documento de um determinado \\
					& evento. \\ 
\textbf{Inverso}: 	& $ hasEventDocument $ \\ 

\hline \\ \hline 

\textbf{Relação}: 	& $ isHeldIn $ \\ 
\textbf{Descrição}:	& Indica que um evento ocorreu em um determinado lugar. \\ 

\hline \\ \hline 

\textbf{Relação}: 	& $ isLocatedIn $ \\ 
\textbf{Descrição}:	& Indica ou que uma universidade está localizada em um de- \\
				    & terminado país ou que um país está localizado em um certo \\
					& continente. \\ 

\hline \\ \hline 

\textbf{Relação}: 	& $ isPartOf $ \\ 
\textbf{Descrição}:	& Indica que um artigo faz parte de uma revista ou anal de \\
					& congresso, ou que um departamento faz parte de um insti- \\
					& tuto ou que um instituto faz parte de uma universidade. \\ 
\textbf{Inverso}: 	& $ hasParts $ \\ 

\hline \\ \hline 

\textbf{Relação}: 	& $ publishedBy $ \\ 
\textbf{Descrição}:	& Indica que uma publicação foi publicada por uma determinada \\
					& organização educacional (universidade). \\ 

\hline \end{longtable} 

Apresentamos, na página a seguir, em tabela, cada papel aqui descrito associado aos seus respectivos domínio e imagem.
%%%%tabela dominio e imagem
  \begin{table}[!h]
  \begin{center}
  \begin{tabular}{|c|c|c|}
  \hline 
  \textbf{Domínio} & \textbf{Papel} & \textbf{Imagem} \\
  \hline \hline
  Person & \textit{\textbf{hasAdvisor}} & Professor \\
  Thesis & & \\
  \hline
  Publication & \textit{\textbf{hasAuthor}} & Person \\
  \hline
  Event & \textit{\textbf{hasEventDocument}} & Publication \\
  \hline
  Institute & \textit{\textbf{hasParts}} & Department \\
  Journal & & JournalArticle \\
  Proceedings & & ConferencePaper \\
  University & & Institute \\
  \hline
  Professor & \textit{\textbf {isAdvisorOf}} & Professor \\
  & & Thesis \\
  \hline
  Professor & \textit{\textbf{isAffiliatedto}} & Department \\
  \hline

  Person & \textit{\textbf{isAuthorOf}} & Publication \\
  \hline
  Publication & \textit{\textbf{isEventDocumentOf}} & Event \\
  \hline
  Event & \textit{\textbf{isHeldIn}} & Place \\
  \hline
  Place & \textit{\textbf{isLocatedIn}} & Place \\
  University & & \\
  \hline
  Article & \textit{\textbf{isPartOf}} & Publication \\
  Department & & Institue \\
  Institute & & University \\
  \hline
  Publication & \textit{\textbf{isPublishedBy}} & EducationalOrganization \\
  \hline
  \end{tabular}
  \end{center}
  \caption{Domínio e Imagem dos Papéis}
  \end{table}

Utilizamos três \textit{datatype properties}: name, year e title. Segue uma tabela com os conceitos que se utilizaram de cada um.

  %%%tabela datatype properties
  \begin{table} [!h]
  \begin{center}
  \begin{tabular}{|c|c|c|}
  \hline 
  \textbf{Name} & \textbf{Year} & \textbf{Title} \\
  \hline \hline
  Conference & Conference & ConferencePaper \\
  \hline
  Journal & Journal & JournalArticle \\
  \hline
  University & DoctoralThesis & DoctoralThesis \\
  \hline
  Institute & MasterThesis & MasterThesis \\
  \hline
  Department & & \\
  \hline
  Professor & & \\
  \hline
  Student & & \\
  \hline
  \end{tabular}
  \end{center}
  \caption{Utilização dos \textit{datatype properties}}
  \end{table}


\subsection{Instâncias}
A ontologia foi populada com instâncias extraídas dos currículos \textit{lattes} dos professores do DCC-IME. As instancias são compostas pelo conjunto mínimo de professores exigidos pelo projeto, de suas teses, de seus orientadores, de seus orientandos e de teses orientadas, de professores coautores, artigos de revista ou conferência, e demais instâncias necessárias para responder as questões de competência.\\
\\
Apresentamos a seguir a convenção de nomes das instâncias relativas a cada conceito. Todos foram escritos inteiramente em letras maiúsculas. 
  %%%tabela convenções de nomes
  \begin{table}[!h]
  \begin{center}
  \begin{tabular}{|c|c|}
  \hline 
  \textbf{Conceito} & \textbf{Convenção} \\
  \hline \hline
  \textbf{Department/Institute/University} & ''SIGLA DA INSTITUIÇÃO'' \\
  \hline
  \textbf{Country/Continent} & ''NOME POR EXTENSO'' \\
  \hline
  \textbf{Professor/Student} & ''NOME EM CITAÇÕES BIBLIOGRÁFICAS'' \\
  \hline
  \textbf{Conference} & ''ABREVIAÇÃO DO NOME''+''aa'' (ano de realização) \\
  \hline
  \textbf{ConferencePaper} & ''AUTOR''\_ CP\_''ID do Paper'' (AUTOR obtido da instância \\
			  &  de Professor relacionada e ID dado pelo grupo) \\
  \hline
  \textbf{Proceeding} & ''NOME DA CONFERÊNCIA''\_ PROC (nome obtido da instância de \\ 
						      & Conference relacionada) \\
  \hline                                     
  \textbf{Journal} & ''ABREVIAÇÃO DO NOME''+''aa''(ano de publicação) \\
  \hline
  \textbf{JournalArticle} & ''AUTOR''\_ JA\_''ID do Artigo'' (AUTOR obtido da instância \\
			  & de Professor relacionada e ID dado pelo grupo) \\
  \hline
  \textbf{DoctoralThesis} & ''AUTOR''\_ DT (autor obtido da instância de Person relacionada) \\
  \hline
  \textbf{MasterThesis} & ''AUTOR''\_ MT (autor obtido da instância de Person relacionada) \\
  \hline
  \end{tabular}
  \end{center}
  \caption{Convenção de Nomes de Instâncias}
  \end{table}


%%%%%%%section
\section{Representação com lógica de descrição}

\subsection{TBox}

  \begin{tabular}[H]{rcp{12cm}}
    Department & $\sqsubseteq$ & $EducationOrganization  \sqcap \exists isPartOf.Institute$ \\
    Institute  & $\sqsubseteq$ & $EducationOrganization  \sqcap \exists isPartOf.University$ \\
    University & $\sqsubseteq$ & $EducationOrganization $ \\
    Conference & $\sqsubseteq$ & $Event \sqcap \forall hasEventDocument.Proceedings$ \\
    Professor  & $\sqsubseteq$ & $Person \sqcap \exists isAffiliatedTo.Department $\\
    Student & $\sqsubseteq$ & $Person$ \\
    Continent & $\sqsubseteq$ & $Place$ \\
    Country & $\sqsubseteq$ & $Place \sqcap \exists isLocatedIn.Continent$ \\
    ConferencePaper & $\sqsubseteq$ & $Article \sqcap \exists isPartOf.Proceeding $ \\
    JournalArticle & $\sqsubseteq$ & $Article \sqcap \exists isPartOf.Journal$ \\
    Journal & $\sqsubseteq$ & $Publication \sqcap \forall hasParts.JournalArticle$ \\
    Proceedings & $\sqsubseteq$ & $Publication \sqcap \forall hasParts.ConferencePaper \sqcap \forall isEventDocument.Conference$\\
    DoctoralThesis & $\sqsubseteq$ & $\forall published.University \sqcap \forall hasAuthor.Person \sqcap {\leq 1 publishedBy.University} \sqcap {\leq 1 hasAuthor.Person} \sqcap \forall hasAdvisor.Professor$ \\
    MastherThesis & $\sqsubseteq$ & $\forall published.University \sqcap \forall hasAuthor.Person \sqcap {\leq 1 publishedBy.University} \sqcap {\leq 1 hasAuthor.Person} \sqcap \forall hasAdvisor.Professor$ \\
  \end{tabular}

\subsection{Rbox}
\begin{tabular}[H]{rcl}
  hasAdvisor & $\equiv$ & isAdvisorOf$^-$ \\
  hasAuthor & $\equiv$ & isAuthorOf$^-$ \\
  hasEventDocument & $\equiv$ & isEventDocumentOf$^-$ \\
  hasParts & $\equiv$ & isPartOf$^-$ \\  
\end{tabular}  




\subsection{Abox}

\begin{tabular}[H]{l}
Professor( WASSERMANN\_R ) \\
Professor( MANDEL\_A ) \\
hasAdvisor(CASTANO\_A\_C\_MT, WASSERMANN\_R)\\
isAdvisorOf(CORREA\_DA\_SILVA\_F\_S, WASSERMANN\_R\_MT)\\
\\
...  
\end{tabular}



%%%%section
\section{Descrição das Consultas}
\label{sec:consultas}

A terceira etapa do projeto consiste em realizar consultas à ontologia populada, a fim de obter respostas para um dado conjunto de questões. Implementamos estas consultas na linguagem SPARQL e utilizamos o motor de consultas ARQ, versão 2.8.1, para executá-las. Importante observar que estas consultas não são aplicadas diretamente ao arquivo \textit{academic-sbc.owl}, e sim a um arquivo contendo todas as inferências da ontologia obtidas pelo provador de teoremas \textit{Pellet}\footnote{O arquivo é obtido selecionando o \textit{Pellet} no menu \textit{Reasoner} e executando o \textit{export} no submenu ``\textit{File} $ \rightarrow $ \textit{Export inferred axioms as ontology...}''.}.

A seguir descreveremos as nove consultas, exibindo suas codificações em SPARQL, comentando sobre seus funcionamentos e mostrando seus resultados obtidos.

\begin{enumerate}
\item \textbf{Quais os alunos que publicaram na revista XXX junto com seu orientador?}

A estratégia desta consulta consiste em identificar todos os artigos de revistas (\textit{?arti}) e as publicações as quais eles pertencem (\textit{?jour}), verificar se esta publicação correspondem a revista XXX (em nosso exemplo, \textit{JASSS05}), e então examinar se entre os autores deste artigo existe algum que possua uma tese orientada pelo outro. Caso verdade, fazemos com que o nome deste seja atribuído a \textit{?RESULT}.

\begin{enumerate}
\item Código SPARQL:
\begin{verbatim}
SELECT DISTINCT ?RESULT
{
    ?arti rdf:type academic-sbc:JournalArticle ;
        academic-sbc:isPartOf ?jour .
    
    FILTER (?jour = academic-sbc:JASSS05).

    ?arti academic-sbc:hasAuthor ?pers ;
        academic-sbc:hasAuthor ?advi .
    ?pers rdf:type academic-sbc:Person ;
        academic-sbc:isAuthorOf ?thes .
    ?thes rdf:type academic-sbc:Thesis ;
        academic-sbc:hasAdvisor ?advi .
    ?pers academic-sbc:name ?RESULT .
}
ORDER BY ?RESULT
\end{verbatim}
\newpage
\item Resultado da consulta:
\begin{verbatim}
-------------------------------------------
| RESULT                                  |
===========================================
| "Lourival Paulino da Silva"^^xsd:string |
-------------------------------------------
\end{verbatim}
\end{enumerate}

\item \textbf{Qual professor escreveu o trabalho ``XXX''?}

A estratégia desta consulta consiste em identificar todas as publicações (\textit{?publ}) e seus títulos (\textit{?titl}), verificar se o título desta publicação correspondem ao título ``XXX'' (em nosso exemplo, \textit{``Resource Bounded Belief Revision''}), e então examinar se entre os autores deste artigo os que são professores. Após identificado, fazemos com que o nome deste seja atribuído a \textit{?RESULT}.

\begin{enumerate}
\item Código SPARQL:
\begin{verbatim}
SELECT DISTINCT ?RESULT
{
    ?publ academic-sbc:title ?titl ;
        rdf:type academic-sbc:Publication .

    FILTER (?titl = "Resource Bounded Belief Revision" 
        || sameTerm(?title, "Resource Bounded Belief Revision") 
        || regex(?titl, "Resource Bounded Belief Revision", "i") ) .

    ?prof academic-sbc:isAuthorOf ?publ ;
        rdf:type academic-sbc:Professor .
    ?prof academic-sbc:name ?RESULT .
}
ORDER BY ?RESULT
\end{verbatim}
\item Resultado da consulta:
\begin{verbatim}
-----------------------------------
| RESULT                          |
===================================
| "Renata Wassermann"^^xsd:string |
-----------------------------------
\end{verbatim}
\end{enumerate}

\item \textbf{Quais professores moraram na Europa?}

Assumindo que um indivíduo morou na Europa se realizou mestrado ou doutorado em alguma universidade localizada neste continente, a estratégia desta consulta consiste em identificar todos os professores (\textit{?prof}), cuja a tese (\textit{?thes}) foi publicada em uma universidade (\textit{?univ}) localizada em algum país (\textit{?coun}) do continente europeu. Após identificado, fazemos com que o nome destes professores sejam atribuídos a \textit{?RESULT}.

\begin{enumerate}
\item Código SPARQL:
\begin{verbatim}
SELECT DISTINCT ?RESULT
{
    ?prof rdf:type academic-sbc:Professor ;
        academic-sbc:isAuthorOf ?thes .
    ?thes rdf:type academic-sbc:Thesis ;
        academic-sbc:publishedBy ?univ .
    ?univ academic-sbc:isLocatedIn ?coun .
    ?coun academic-sbc:isLocatedIn ?cont .

    FILTER (?cont = academic-sbc:EUROPE) .

    ?prof academic-sbc:name ?RESULT. 
}
ORDER BY ?RESULT
\end{verbatim}
\item Resultado da consulta:
\begin{verbatim}
-----------------------------------------------
| RESULT                                      |
===============================================
| "Flavio Soares Correa da Silva"^^xsd:string |
| "José Coelho de Pina Junior"^^xsd:string    |
| "Renata Wassermann"^^xsd:string             |
| "Yoshiko Wakabayashi"^^xsd:string           |
-----------------------------------------------
\end{verbatim}
\end{enumerate}

\item \textbf{Quais professores foram orientados por professores do IME?}

A estratégia desta consulta consiste em identificar os professores (\textit{?prof}) que são autores de uma tese (\textit{?thes}) cujo orientador (\textit{?advi}) é uma professor afiliado a um dado departamento (?depa). Então verificamos se este departamento faz parte do instituto IME, e caso se confirme, fazemos com que o nome destes professores sejam atribuídos a \textit{?RESULT}.

\begin{enumerate}
\item Código SPARQL:
\begin{verbatim}
SELECT DISTINCT ?RESULT
{
    ?prof rdf:type academic-sbc:Professor ;
        academic-sbc:isAuthorOf ?thes .
    ?thes rdf:type academic-sbc:Thesis ;
        academic-sbc:hasAdvisor ?advi .
    ?advi rdf:type academic-sbc:Professor ;
        academic-sbc:isAffiliatedTo ?depa .
    
    ?depa academic-sbc:isPartOf academic-sbc:IME .

    ?prof academic-sbc:name ?RESULT
}
ORDER BY ?RESULT
\end{verbatim}
\item Resultado da consulta:
\begin{verbatim}
-------------------------------------------------
| RESULT                                        |
=================================================
| "Alair Pereira do Lago"^^xsd:string           |
| "Arnaldo Mandel"^^xsd:string                  |
| "Fabio Kon"^^xsd:string                       |
| "Francisco José da Silva e Silva"^^xsd:string |
| "José Coelho de Pina Junior"^^xsd:string      |
| "Nina Sumiko Tomita Hirata"^^xsd:string       |
| "Raphael Yokoingawa de Camargo"^^xsd:string   |
| "Renata Wassermann"^^xsd:string               |
| "Roberto Hirata Junior"^^xsd:string           |
| "Ronaldo Fumio Hashimoto"^^xsd:string         |
| "Yoshiko Wakabayashi"^^xsd:string             |
-------------------------------------------------
\end{verbatim}
\end{enumerate}

\item \textbf{Quais professores são co-autores de outros professores do mesmo departamento?}

A estratégia desta consulta consiste em identificar dois autores (\textit{?pro1} e \textit{?pro2}), distintos, de uma publicação (\textit{?publ}) e verificar se estes são professores afiliados a um mesmo departamento (\textit{?depa}). Caso tudo se confirme, fazemos com que o nome do primeiro professor seja atribuído a \textit{?RESULT}.

\begin{enumerate}
\item Código SPARQL:
\begin{verbatim}
SELECT DISTINCT ?RESULT
{
    ?publ rdf:type academic-sbc:Publication ;
        academic-sbc:hasAuthor ?pro1 ;
        academic-sbc:hasAuthor ?pro2 .
    FILTER ( ?pro1 != ?pro2 ).
    ?pro1 rdf:type academic-sbc:Professor ;
        academic-sbc:isAffiliatedTo ?depa .
    ?pro2 rdf:type academic-sbc:Professor ;
        academic-sbc:isAffiliatedTo ?depa .
    ?pro1 academic-sbc:name ?RESULT .
}
ORDER BY ?RESULT
\end{verbatim}
\item Resultado da consulta:
\begin{verbatim}
------------------------------------------------
| RESULT                                       |
================================================
| "Alair Pereira do Lago"^^xsd:string          |
| "Alfredo Goldman vel Lejbman"^^xsd:string    |
| "Ana Cristina Vieira de Melo"^^xsd:string    |
| "Arnaldo Mandel"^^xsd:string                 |
| "Carlos Eduardo Ferreira"^^xsd:string        |
| "Cristina Gomes Fernandes"^^xsd:string       |
| "Fabio Kon"^^xsd:string                      |
| "Flavio Soares Correa da Silva"^^xsd:string  |
| "Imre Simon"^^xsd:string                     |
| "José Coelho de Pina Junior"^^xsd:string     |
| "Junior Barrera"^^xsd:string                 |
| "Leliane Nunes de Barros"^^xsd:string        |
| "Marcelo Finger"^^xsd:string                 |
| "Nina Sumiko Tomita Hirata"^^xsd:string      |
| "Paulo Feofiloff"^^xsd:string                |
| "Renata Wassermann"^^xsd:string              |
| "Roberto Hirata Junior"^^xsd:string          |
| "Roberto Marcondes Cesar Junior"^^xsd:string |
| "Ronaldo Fumio Hashimoto"^^xsd:string        |
| "Yoshiko Wakabayashi"^^xsd:string            |
------------------------------------------------
\end{verbatim}
\end{enumerate}

\item \textbf{Quais professores publicaram com um não-professor que publicou com outro professor?}

A estratégia desta consulta consiste em identificar dois professores distintos (\textit{?pro1} e \textit{?pro2}), que possuam um coautor (\textit{?pers}) em comum, e que este não pertença ao tipo professor, identificado pela inexistência de relação com o conceito $ Professor $ ou de uma relação diferente da relação de tipo. Caso tudo se confirme, fazemos com que o nome do primeiro professor seja atribuído a \textit{?RESULT}.
\newpage
\begin{enumerate}
\item Código SPARQL:
\begin{verbatim}
SELECT DISTINCT ?RESULT
{
    ?pro1 rdf:type academic-sbc:Professor .
    ?pro2 rdf:type academic-sbc:Professor .

    FILTER ( ?pro1 != ?pro2 ) .
    
    ?pub1 academic-sbc:hasAuthor ?pro1 .
    ?pub1 academic-sbc:hasAuthor ?pers .
    ?pub2 academic-sbc:hasAuthor ?pers .
    ?pub2 academic-sbc:hasAuthor ?pro2 .
    
    ?pers rdf:type academic-sbc:Person .
    OPTIONAL {?pers ?relation academic-sbc:Professor . }
    FILTER (!bound(?relation) || ?relation != rdf:type ) .

    ?pro1 academic-sbc:name ?RESULT .
}
ORDER BY ?RESULT
\end{verbatim}

\item Resultado da consulta:\\
\begin{verbatim}
-------------------------------------------------
| RESULT                                        |
=================================================
| "Alair Pereira do Lago"^^xsd:string           |
| "Alfredo Goldman vel Lejbman"^^xsd:string     |
| "Ana Cristina Vieira de Melo"^^xsd:string     |
| "Arnaldo Mandel"^^xsd:string                  |
| "Carlos Eduardo Ferreira"^^xsd:string         |
| "Cristina Gomes Fernandes"^^xsd:string        |
| "Fabio Kon"^^xsd:string                       |
| "Flavio Soares Correa da Silva"^^xsd:string   |
| "Francisco José da Silva e Silva"^^xsd:string |
| "José Coelho de Pina Junior"^^xsd:string      |
| "Junior Barrera"^^xsd:string                  |
| "Ralph Johnson"^^xsd:string                   |
| "Raphael Yokoingawa de Camargo"^^xsd:string   |
| "Roberto Marcondes Cesar Junior"^^xsd:string  |
| "Ronaldo Fumio Hashimoto"^^xsd:string         |
| "Yoshiko Wakabayashi"^^xsd:string             |
-------------------------------------------------
\end{verbatim}
\end{enumerate}

\item \textbf{Quais professores publicaram artigos no ano XX?}

A estratégia desta consulta consiste em identificar publicações do tipo $ Article $ que, se do tipo $ JournalArticle $ faz parte de uma revista (?jour) publicada em um dado ano \textit{?year}, ou se do tipo $ ConferencePaper $ faz parte de um \textit{proceedings} (?proc) que é documento resultante de uma conferência (\textit{?conf}) que ocorreu no mesmo ano \textit{?year}, e este ano \textit{?year} corresponde ao ano XX (em nosso exemplo, \textit{2000}). Caso encontremos tais publicações, identificamos seus autores e atribuimos seus nomes a \textit{?RESULT}.
\newpage
\begin{enumerate}
\item Código SPARQL:
\begin{verbatim}
SELECT DISTINCT ?RESULT
{        
    ?publ rdf:type academic-sbc:Article .

    {
        ?publ rdf:type academic-sbc:JournalArticle ;
            academic-sbc:isPartOf ?jour .
        ?jour rdf:type academic-sbc:Journal ;
            academic-sbc:year ?year .
    }
    UNION
    { 
        ?publ rdf:type academic-sbc:ConferencePaper ;
            academic-sbc:isPartOf ?proc .
        ?proc rdf:type academic-sbc:Proceedings ;
            academic-sbc:isEventDocumentOf ?conf .
        ?conf rdf:type academic-sbc:Conference ;
                academic-sbc:year ?year .
    }
    
    FILTER (?year = 2000 || sameTerm(?year, "2000")) .
    
    ?publ academic-sbc:hasAuthor ?prof .
    ?prof rdf:type academic-sbc:Professor .        
    ?prof academic-sbc:name ?RESULT .
}
ORDER BY ?RESULT
\end{verbatim}
\item Resultado da consulta:
\begin{verbatim}
-----------------------------------------------
| RESULT                                      |
===============================================
| "Ana Cristina Vieira de Melo"^^xsd:string   |
| "Fabio Kon"^^xsd:string                     |
| "Flavio Soares Correa da Silva"^^xsd:string |
| "Renata Wassermann"^^xsd:string             |
| "Roy Harold Campbell"^^xsd:string           |
-----------------------------------------------
\end{verbatim}
\end{enumerate}

\item \textbf{Quais professores publicaram artigos em conferências no ano XX?}

A estratégia desta consulta é semelhante a do item anterior, sendo no entanto restrita a artigos em conferência.

\begin{enumerate}
\item Código SPARQL:
\begin{verbatim}
SELECT DISTINCT ?RESULT
{        
    ?publ rdf:type academic-sbc:ConferencePaper ;
        academic-sbc:isPartOf ?proc .
    ?proc rdf:type academic-sbc:Proceedings ;
        academic-sbc:isEventDocumentOf ?conf .
    ?conf rdf:type academic-sbc:Conference ;
        academic-sbc:year ?year .

    FILTER (?year = 2000 || sameTerm(?year, "2000")) .

    ?publ academic-sbc:hasAuthor ?prof .
    ?prof rdf:type academic-sbc:Professor .        
    ?prof academic-sbc:name ?RESULT .
}
ORDER BY ?RESULT
\end{verbatim}
\item Resultado da consulta:
\begin{verbatim}
-----------------------------------------------
| RESULT                                      |
===============================================
| "Ana Cristina Vieira de Melo"^^xsd:string   |
| "Flavio Soares Correa da Silva"^^xsd:string |
| "Renata Wassermann"^^xsd:string             |
-----------------------------------------------
\end{verbatim}
\end{enumerate}

\item \textbf{Quais professores publicaram artigos em conferências nacionais no ano XX?}

A estratégia desta consulta é semelhante a do item anterior, acrecido de uma verificação a conferencia ocorreu no Brasil. Neste exemplo assumimos o ano de consulta como 1995.

\begin{enumerate}
\item Código SPARQL:
\begin{verbatim}
SELECT DISTINCT ?RESULT
{        
    ?publ rdf:type academic-sbc:ConferencePaper ;
        academic-sbc:isPartOf ?proc .
    ?proc rdf:type academic-sbc:Proceedings ;
        academic-sbc:isEventDocumentOf ?conf .
    ?conf rdf:type academic-sbc:Conference ;
        academic-sbc:year ?year ;
        academic-sbc:isHeldIn ?plac .

    FILTER (?plac = academic-sbc:BRAZIL )
    FILTER (?year = 1995 || sameTerm(?year, "1995")) .

    ?publ academic-sbc:hasAuthor ?prof .
    ?prof rdf:type academic-sbc:Professor .        
    ?prof academic-sbc:name ?RESULT .
}
ORDER BY ?RESULT
\end{verbatim}
\item Resultado da consulta:
\begin{verbatim}
-----------------------------------------------
| RESULT                                      |
===============================================
| "Fabio Kon"^^xsd:string                     |
| "Flavio Soares Correa da Silva"^^xsd:string |
-----------------------------------------------
\end{verbatim}
\end{enumerate}

\end{enumerate}

\newpage
\section{Extra: Geração de arquivos HTML}
\label{sec:extra}

SPARQL possue a capacidade de gerar arquivos XML, adicionando na linha
de comando \texttt{--results=xml} no momento de realizar uma consulta. No
entanto XSLT, uma linguagem de marcação XML, consegue transformar 
arquivos XML em HTML.

Por exemplo, aplicando a opção adicional do SPARQL na primeira consulta 
da Seção \ref{sec:consultas}, obtemos um arquivo XML como este: 

\begin{verbatim}
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
  <head>
    <variable name="RESULT"/>
  </head>
  <results>
    <result>
      <binding name="RESULT">
        <literal datatype="http://www.w3.org/2001/XMLSchema#string">
        Lourival Paulino da Silva</literal>
      </binding>
    </result>
  </results>
</sparql>
\end{verbatim}

O arquivo XSLT que construimos foi o seguinte:
\begin{verbatim}
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <html>
  <body>
  <h2>Quais são os alunos que publicaram na <i>Revista de Sociedades 
      Artificiais e Simulação Social</i> junto com seu orientador?</h2>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th>Resultado</th>
      </tr>
      <xsl:for-each select="sparql/results/result/binding">
      <tr>
        <td><xsl:value-of select="literal"/></td>
      </tr>
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>
\end{verbatim}

Modificamos nosso arquivo XML gerado pelo sparql, mudando a linha :
\begin{verbatim}
  <sparql xmlns="http://www.w3.org/2005/sparql-results#">
\end{verbatim}
simplesmente por \texttt{<sparql>}. 

Finalmente ingressamos nossos arquivos XML e XLT na ferramenta Online
XSLT Editor \footnote{\url{http://www.w3schools.com/xsl/}}, obtendo
como resultado a o código HTML a seguir.

\begin{verbatim}
<html>
  <body>
  <h2>
    Quais são os alunos que publicaram na
    <i>Revista de Sociedades Artificiais
     e Simulação Social</i>
    junto com seu orientador?
  </h2>
  <table border="1">
    <tbody>
      <tr bgcolor="#9acd32">
      </tr>
      <tr>
        <td>Lourival Paulino da Silva</td>
      </tr>
    </tbody>
  </table>
  </body>
</html>
\end{verbatim}


Este código visualmente aparece na tela como na figura \ref{fig:consulta1}.

\begin{figure}[!h]
  \centering
  \includegraphics[width=.6\textwidth]{images/consulta1.png}
  \caption{Resultado HTML para a consulta 1}
  \label{fig:consulta1}
\end{figure}

A seguir, apresentamos os resultados em HTML das outras consultas,
depois de ter modificado o XML, e modificado no XSLT o título de cada
resultado.


\begin{figure}[!h]
  \centering
  \includegraphics[width=.6\textwidth]{images/consulta2.png}
  \caption{Resultado HTML para a consulta 2}
  \label{fig:consulta2}
\end{figure}


\begin{figure}[!h]
  \centering
  \includegraphics[width=.6\textwidth]{images/consulta3.png}
  \caption{Resultado HTML para a consulta 3}
  \label{fig:consulta3}
\end{figure}

\begin{figure}[!h]
  \centering
  \includegraphics[width=.6\textwidth]{images/consulta4.png}
  \caption{Resultado HTML para a consulta 4}
  \label{fig:consulta4}
\end{figure}

\begin{figure}[!h]
  \centering
  \includegraphics[width=.6\textwidth]{images/consulta5.png}
  \caption{Resultado HTML para a consulta 5}
  \label{fig:consulta5}
\end{figure}

\begin{figure}[!h]
  \centering
  \includegraphics[width=.6\textwidth]{images/consulta6.png}
  \caption{Resultado HTML para a consulta 6}
  \label{fig:consulta6}
\end{figure}

\begin{figure}[!h]
  \centering
  \includegraphics[width=.6\textwidth]{images/consulta7.png}
  \caption{Resultado HTML para a consulta 7}
  \label{fig:consulta7}
\end{figure}

\begin{figure}[!h]
  \centering
  \includegraphics[width=.6\textwidth]{images/consulta8.png}
  \caption{Resultado HTML para a consulta 8}
  \label{fig:consulta8}
\end{figure}

\begin{figure}[!h]
  \centering
  \includegraphics[width=.6\textwidth]{images/consulta9.png}
  \caption{Resultado HTML para a consulta 9}
  \label{fig:consulta9}
\end{figure}
\end{document}

